Skip to main content

Bagaimana Control Flow Bekerja di Move-Sui?

Sekarang kita pelajari penggunaan kondisi di Move-Sui: ekspresi if, penggunaan assert!, dan rekursi (karena tidak ada loop for/while). Move menghindari loop tak terbatas demi determinisme. Pola perulangan digantikan oleh rekursi atau pola lain yang terkontrol.

Ekspresi if

if menjalankan blok kode saat kondisi boolean bernilai true; jika tidak, bisa dialihkan ke blok else. Karena if adalah ekspresi, keseluruhan ekspresi biasanya diakhiri titik koma saat hasilnya di-bind ke variabel. Bentuk umum:

if (<bool_expression>) {
<expression>
} else {
<expression>
};

Contoh:

module examples::if {

public struct ExampleObject has key {
id: UID,
num: u8,
}

public fun main(ctx: &mut TxContext) {
let a = true; // coba ganti ke false
let b = if (a) { 10 } else { 20 };

let obj = ExampleObject {
id: object::new(ctx),
num: b,
};
}
}

Jika a == true maka b = 10; jika tidak maka b = 20. Nilai b kemudian dipakai untuk field num.

Catatan: Cabang if dan else harus menghasilkan tipe yang sama; kalau tidak akan error.

Solo if

module examples::if_only {

public struct ExampleObject has key { id: UID, num: u8 }

public fun main(ctx: &mut TxContext) {
let a = true;
let b = if (a) { 10 }; // jika a = false, b tidak terdefinisi

let obj = ExampleObject { id: object::new(ctx), num: b };
}
}

Solo if berisiko membuat variabel tidak terinisialisasi bila kondisi false; gunakan penuh dengan else kecuali benar-benar yakin.

Fungsi Built-in assert!

assert!(kondisi, kode_error); menghentikan eksekusi (abort) bila kondisi tidak terpenuhi.

module examples::assert_demo {
public fun main(a: bool) {
assert!(a == true, 0);
// kode di bawah hanya jalan jika a == true
}
}

Rekursi di Move-Sui

Karena tidak ada loop tradisional, gunakan rekursi dengan kondisi dasar (base case) yang jelas agar terminasi terjamin. Contoh menghitung faktorial:

module examples::factorial_demo {
public fun factorial(n: u64): u64 {
if (n == 0) { 1 } else { n * factorial(n - 1) }
}
}

Kondisi dasar n == 0 memastikan fungsi berhenti.

Penutup

Memahami control flow memungkinkan kamu menulis logika bercabang, validasi (melalui assert!), serta perulangan terkontrol via rekursi. Ini penting untuk membangun aturan game, validasi transaksi, atau mekanisme lain seperti pseudo-random logic sederhana. Berikutnya kita bahas ekspresi dan operator yang tersedia di Move-Sui.